#include <stdio.h>
/**
 * 汉诺塔
 * @Author   smallcatx0
 * @DateTime 2017-03-12
 * @param    n          [汉诺塔层数]
 * @param    S          [起始（start）的柱子]
 * @param    T          [协助移动（temp）的柱子]
 * @param    E          [目的(End)柱子]
 * @param    time       [移动的次数统计]
 */
void hannuota(int n,char S,char T,char E,int * time)
{
/* 算法思路：
	if(S只剩一个盘子)
		直接将盘子从S->E;
	else
		先将S上的n-1个盘子借助E移到T;
		直接将最后一个盘子S->E;
		最后将T上的n-1个盘子借助S移到E;
 */
	if (1 == n)
	{	
		printf("%d: %c->%c\n",n,S,E);
		(* time) = (* time) + 1;
	}
	else
	{
		hannuota(n-1,S,E,T,time);
		printf("%d: %c->%c\n",n,S,E);
		(* time) = (* time) + 1;
		hannuota(n-1,T,S,E,time);
	}
}

int main()
{
	int n = 20;
	// printf("input the disk num:\n");
	// scanf("%d",&n);
	int time = 1;
	hannuota(n,'A','B','C',&time);
	printf("All cost %d step!\n",time);
	return 0;
}